/**
 * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.nightonke.boommenusample.slice;

import com.nightonke.boommenu.Animation.BoomEnum;
import com.nightonke.boommenu.BoomButtons.ButtonPlaceAlignmentEnum;
import com.nightonke.boommenu.BoomButtons.ButtonPlaceEnum;
import com.nightonke.boommenu.BoomMenuButton;
import com.nightonke.boommenu.ButtonEnum;
import com.nightonke.boommenu.Piece.PiecePlaceEnum;
import com.nightonke.boommenu.Util;
import com.nightonke.boommenusample.BuilderManager;
import com.nightonke.boommenusample.ItemProvider;
import com.nightonke.boommenusample.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;

import java.util.ArrayList;
import java.util.List;

public class ButtonPlaceAlignmentAbilitySlice extends AbilitySlice {

    private BoomMenuButton bmb;

    private Text topMarginSeekText;
    private Text bottomMarginSeekText;
    private Text leftMarginSeekText;
    private Text rightMarginSeekText;

    /**
     * onStart
     * @param intent
     */
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_button_place_alignment);

        bmb = (BoomMenuButton) findComponentById(ResourceTable.Id_bmb);
        assert bmb != null;
        bmb.setButtonEnum(ButtonEnum.SimpleCircle);
        bmb.setPiecePlaceEnum(PiecePlaceEnum.DOT_4_1);
        bmb.setButtonPlaceEnum(ButtonPlaceEnum.SC_4_1);
        for (int i = 0; i < bmb.getPiecePlaceEnum().pieceNumber(); i++)
            bmb.addBuilder(BuilderManager.getSimpleCircleButtonBuilder());
        bmb.buildButton();

        ListContainer listView = (ListContainer) findComponentById(ResourceTable.Id_list_view);
        assert listView != null;


        DirectionalLayoutManager directionalLayoutManager = new DirectionalLayoutManager();
        directionalLayoutManager.setOrientation(Component.VERTICAL);
        listView.setLayoutManager(directionalLayoutManager);

        listView.setItemProvider(new ItemProvider(this, getData(), ResourceTable.Layout_simple_expandable_list_item_1));
        listView.setItemClickedListener(new ListContainer.ItemClickedListener() {
            @Override
            public void onItemClicked(ListContainer listContainer, Component component, int position, long l) {
                bmb.setButtonPlaceAlignmentEnum(ButtonPlaceAlignmentEnum.getEnum(position));
            }
        });
        initTopMarginSeek();
        initBottomMarginSeek();
        initLeftMarginSeek();
        initRightMarginSeek();
    }

    private void initTopMarginSeek() {
        Slider topMarginSeekBar = (Slider) findComponentById(ResourceTable.Id_top_margin_seek);
        assert topMarginSeekBar != null;
        topMarginSeekBar.setMaxValue(Util.dp2px(50));
        topMarginSeekBar.setProgressValue((int) bmb.getButtonTopMargin());
        topMarginSeekBar.setValueChangedListener(new Slider.ValueChangedListener() {
            @Override
            public void onProgressUpdated(Slider slider, int i, boolean b) {
                topMarginSeekText.setText("Top margin = " + slider.getProgress() + " pixel(s)");
                bmb.setButtonTopMargin(i);
            }

            @Override
            public void onTouchStart(Slider slider) {

            }

            @Override
            public void onTouchEnd(Slider slider) {

            }
        });
        topMarginSeekText = (Text) findComponentById(ResourceTable.Id_top_margin_text);
        topMarginSeekText.setText("Top margin = " + topMarginSeekBar.getProgress() + " pixel(s)");
    }

    private void initBottomMarginSeek() {
        Slider bottomMarginSeekBar = (Slider) findComponentById(ResourceTable.Id_bottom_margin_seek);
        assert bottomMarginSeekBar != null;
        bottomMarginSeekBar.setMaxValue(Util.dp2px(50));
        bottomMarginSeekBar.setProgressValue((int) bmb.getButtonBottomMargin());
        bottomMarginSeekBar.setValueChangedListener(new Slider.ValueChangedListener() {
            @Override
            public void onProgressUpdated(Slider slider, int i, boolean b) {
                bottomMarginSeekText.setText("Bottom margin = " + slider.getProgress() + " pixel(s)");
                bmb.setButtonBottomMargin(i);
            }

            @Override
            public void onTouchStart(Slider slider) {

            }

            @Override
            public void onTouchEnd(Slider slider) {

            }
        });
        bottomMarginSeekText = (Text)findComponentById(ResourceTable.Id_bottom_margin_text);
        bottomMarginSeekText.setText("Bottom margin = " + bottomMarginSeekBar.getProgress() + " pixel(s)");
    }

    private void initLeftMarginSeek() {
        Slider leftMarginSeekBar = (Slider) findComponentById(ResourceTable.Id_left_margin_seek);
        assert leftMarginSeekBar != null;
        leftMarginSeekBar.setMaxValue(Util.dp2px(50));
        leftMarginSeekBar.setProgressValue((int) bmb.getButtonLeftMargin());
        leftMarginSeekBar.setValueChangedListener(new Slider.ValueChangedListener() {
            @Override
            public void onProgressUpdated(Slider slider, int i, boolean b) {
                leftMarginSeekText.setText("Left margin = " + slider.getProgress() + " pixel(s)");
                bmb.setButtonLeftMargin(i);
            }

            @Override
            public void onTouchStart(Slider slider) {

            }

            @Override
            public void onTouchEnd(Slider slider) {

            }
        });
        leftMarginSeekText = (Text)findComponentById(ResourceTable.Id_left_margin_text);
        leftMarginSeekText.setText("Left margin = " + leftMarginSeekBar.getProgress() + " pixel(s)");
    }

    private void initRightMarginSeek() {
        Slider rightMarginSeekBar = (Slider) findComponentById(ResourceTable.Id_right_margin_seek);
        assert rightMarginSeekBar != null;
        rightMarginSeekBar.setMaxValue(Util.dp2px(50));
        rightMarginSeekBar.setProgressValue((int) bmb.getButtonRightMargin());
        rightMarginSeekBar.setValueChangedListener(new Slider.ValueChangedListener() {
            @Override
            public void onProgressUpdated(Slider slider, int i, boolean b) {
                rightMarginSeekText.setText("Right margin = " + slider.getProgress() + " pixel(s)");
                bmb.setButtonRightMargin(i);
            }

            @Override
            public void onTouchStart(Slider slider) {

            }

            @Override
            public void onTouchEnd(Slider slider) {

            }
        });
        rightMarginSeekText = (Text)findComponentById(ResourceTable.Id_right_margin_text);
        rightMarginSeekText.setText("Right margin = " + rightMarginSeekBar.getProgress() + " pixel(s)");
    }

    private List<String> getData() {
        List<String> data = new ArrayList<>();
        for (int p = 0; p < ButtonPlaceAlignmentEnum.values().length - 1; p++)
            data.add(ButtonPlaceAlignmentEnum.getEnum(p) + "");
        return data;
    }

    /**
     * onActive
     */
    @Override
    public void onActive() {
        super.onActive();
    }

    /**
     * onForeground
     * @param intent
     */
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
